Software programs may be designed to be compatible with a wide variety of data and users. Web browsers, for example, process millions of different websites, using many different scripts and applets. In the competitive field of software development, an application's loading speed, execution speed, and memory consumption may be important to customers. Optimizing the binary layout of the software to suit the typical usage of the software can improve its loading time and execution speed, while reducing its memory consumption. However, testing of the software across the large number of test cases can be time consuming. Also, determining which code blocks to reorganize and how they affect program performance for a large program can be difficult to determine.